home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 November / PCWorld_2006-11_cd.bin / domacnost a kancelar / findgraph / fgraph.exe / {app} / TestVC / CoolMenu.h < prev    next >
C/C++ Source or Header  |  2002-11-20  |  3KB  |  85 lines

  1. ////////////////////////////////////////////////////////////////
  2. // OwnerDraw Menu
  3. // 1998 Microsoft Systems Journal. 
  4. // from DiLascia Coolmenu\MBTest\CoolMenu.cpp
  5. // 1. add 'CPtrList m_menuItems' to remove memory leaks
  6. // 2. Remove accelerator
  7. // 3. Remove WM_CHAR
  8. // 4. Get image in bitmap from m_wndToolBar
  9. // 5. For IdButn = ID_FILE_OPEN add Popup menu IDR_FILEDROPDOWN
  10.  
  11. //////////////////
  12.  
  13. //---------------------------------------------------------------------------------------------
  14.  
  15. //
  16. #include "SubClass.h"
  17.  
  18. //////////////////
  19. // CCoolMenuManager implements "cool" menus with buttons in them. To use:
  20. //
  21. //  *    Instantiate in your CMainFrame.
  22. //     * Call Install to install it
  23. //  * Call LoadToolbars or LoadToolbar to load toolbars
  24. //
  25. //  Don't forget to link with CoolMenu.cpp, Subclass.cpp and DrawTool.cpp!
  26. //
  27. class CCoolMenuManager : private CSubclassWnd {
  28. public:
  29.     DECLARE_DYNAMIC(CCoolMenuManager)
  30.     CCoolMenuManager();
  31.     ~CCoolMenuManager();
  32.  
  33.  
  34.     // public functions to use
  35.     void Install(CFrameWnd* pFrame, CToolBar  *pToolBar); // connect to main frame
  36.     // add drop_down button (now only ID_FILE_OPEN)
  37.     void AddDropDown(UINT idButton, UINT idMenu, UINT uFlags=TPM_RIGHTBUTTON); 
  38.  
  39.     // should never need to call:
  40.     virtual void Destroy(); // destroys everything--to re-load new toolbars?
  41.  
  42.  
  43. protected:
  44.     CFrameWnd*        m_pFrame;        // frame window I belong to
  45.     CToolBar *        m_pToolBar;     // use only 1 toolbar
  46.     CFont            m_fontMenu;        // menu font
  47.     CSize            m_szButton;        // size of button (including shadow)
  48.     CPtrList        m_menuList;        // list of HMENU's initialized
  49.     CPtrList        m_menuItems;    // list of CMyItemData
  50.     CMapWordToPtr   m_dropButns;    // list of buttons with drop down (idButton, idMenu)
  51.  
  52.     // helpers
  53.     CFont* GetMenuFont();
  54.     void DrawMenuText(CDC& dc, CRect rc, CString text, COLORREF color);
  55.     BOOL Draw3DCheckmark(CDC& dc, const CRect& rc, BOOL bSelected,
  56.                 HBITMAP hbmCheck=NULL);
  57.     void DrawButton(CDC& dc, int iButton, CPoint p, BOOL bEnabled);
  58.     void ConvertMenu(CMenu* pMenu,UINT nIndex,BOOL bSysMenu,BOOL bShowButtons);
  59.  
  60.  
  61.     // window proc to hook frame using CSubclassWnd implementation
  62.     virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp);
  63.  
  64.     // CSubclassWnd message handlers 
  65.     virtual void OnInitMenuPopup(CMenu* pMenu, UINT nIndex, BOOL bSysMenu);
  66.     virtual BOOL OnMeasureItem(LPMEASUREITEMSTRUCT lpms);
  67.     virtual BOOL OnDrawItem(LPDRAWITEMSTRUCT lpds);
  68.     virtual void OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu);
  69.     virtual BOOL OnNotify(UINT msg, WPARAM wParam, LPARAM lParam);
  70.  
  71.     void    OnFiledropdown(UINT nIdButn);
  72.  
  73. };
  74.  
  75. //////////////////
  76. // Friendly version of MENUITEMINFO initializes itself
  77. //
  78. struct CMenuItemInfo : public MENUITEMINFO {
  79.     CMenuItemInfo()
  80.     { memset(this, 0, sizeof(MENUITEMINFO));
  81.       cbSize = sizeof(MENUITEMINFO);
  82.     }
  83. };
  84.  
  85.